//package com.jsyl.qies.business.handle;
//
//import com.alibaba.fastjson.JSONObject;
//import com.jsyl.qies.business.constant.EvaluationStandardConstant;
//import com.jsyl.qies.business.domain.ChildEvaluate;
//import com.jsyl.qies.business.domain.QuestionBank;
//import com.jsyl.qies.business.domain.TrainStudentAbility;
//import com.jsyl.qies.business.domain.TrainStudentScheduleQuestion;
//import com.jsyl.qies.business.mapper.*;
//import com.jsyl.qies.business.vo.ScheduleBasicsVO;
//import com.jsyl.qies.common.utils.DateUtils;
//import com.jsyl.qies.common.utils.IntervalUtil;
//import com.jsyl.qies.common.utils.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.math.BigDecimal;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//@Component
//public class PromotedHandle {
//
//    @Autowired
//    private TrainStudentScheduleRecordMapper trainStudentScheduleRecordMapper;
//
//    @Autowired
//    private QuestionBankMapper questionBankMapper;
//
//    @Autowired
//    private TrainStudentCompleteQuestionMapper trainStudentCompleteQuestionMapper;
//
//    @Autowired
//    private TrainStudentScheduleQuestionMapper trainStudentScheduleQuestionMapper;
//
//    @Autowired
//    private ScheduleDetailChildMapper scheduleDetailChildMapper;
//
//    @Autowired
//    private TrainStudentAbilityMapper trainStudentAbilityMapper;
//
//    @Autowired
//    private ChildEvaluateMapper childEvaluateMapper;
//
//    /**
//     * 根据学生id、课程时间、出题编号、出题类型来找出全部的答题记录并判断是否有连续3天已达成
//     *
//     * @param studentId
//     * @param scheduleTime
//     * @param questionNum
//     * @param questionType
//     * @return
//     */
//    public boolean questionPromoted(Long studentId, Integer scheduleTime, Integer questionNum, Integer questionType) {
//        String gradeStr = trainStudentScheduleRecordMapper.selectQuestionPromoted(studentId, scheduleTime, questionNum, questionType);
//        String grade = StringUtils.deleteString(gradeStr, ',');
//        int i = StringUtils.charMaxSize(grade, '3');
//        if (i > 2) {
//            return true;
//        }
//        return false;
//    }
//
//    /**
//     * 计算完成比例，晋级与出题会用到
//     *
//     * @param studentId
//     * @param evaluateModuleType
//     * @param evaluateQuestion
//     * @param evaluateScore
//     * @param questionBankId
//     * @return
//     */
//    public Integer percentageComplete(Long studentId, Integer evaluateModuleType, Integer evaluateQuestion, Integer evaluateScore, Long questionBankId) {
//        Integer allCount = questionBankMapper.selectEvaluateCount(evaluateModuleType, evaluateQuestion, evaluateScore);
//        Integer count = trainStudentCompleteQuestionMapper.selectByStudentIdAndQuestionBankId(studentId, questionBankId);
//        double percentage = new BigDecimal((float)count / allCount).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//        if (IntervalUtil.isInTheInterval(String.valueOf(percentage), EvaluationStandardConstant.HAS_BEEN_STABLE)) {
//            return 1;
//        } else if (IntervalUtil.isInTheInterval(String.valueOf(percentage), EvaluationStandardConstant.NEED_CONSOLIDATE)) {
//            return 2;
//        } else if (IntervalUtil.isInTheInterval(String.valueOf(percentage), EvaluationStandardConstant.NOT_REACH)) {
//            return 3;
//        }
//        return null;
//    }
//
//    /**
//     * 排课过程中需要排除部分课程
//     *
//     * @param studentId
//     * @param evaluateModuleType
//     * @param evaluateQuestion
//     * @param evaluateScore
//     * @param num
//     */
//    public Integer addSchedule(Long studentId, Integer evaluateModuleType, Integer evaluateQuestion, Integer evaluateScore, Integer num, Integer questionNum, Integer questionPlan) {
//        String nextMonth = DateUtils.getNextMonth();
//        // String nowMonth = DateUtils.dateTimeNow(DateUtils.YYYYMM);
//        // 根据学生id 查询出除排课相关的其他信息
//        ScheduleBasicsVO scheduleBasicsVO = scheduleDetailChildMapper.selectByStudentId(studentId, nextMonth);
//        // 查询出已稳定的项目
//        List<Long> questionBankIds = trainStudentCompleteQuestionMapper.selectByStudentIdAndEvaluate(studentId, evaluateModuleType, evaluateQuestion, evaluateScore);
//        // 查询出本期排过的项目
//        List<Long> questionBankIdss = trainStudentScheduleQuestionMapper.selectByStudentIdAndMonth(studentId, nextMonth);
//        questionBankIds.addAll(questionBankIdss);
//        // 查询出除了已稳定、本期排过的项目
//        List<QuestionBank> questionBanks = questionBankMapper.selectByEvaluate(evaluateModuleType, evaluateQuestion, evaluateScore, questionBankIds);
//        Map<String, Object> map = new HashMap<>();
//        map.put("未达成", EvaluationStandardConstant.NOT_REACH);
//        map.put("需巩固", EvaluationStandardConstant.NEED_CONSOLIDATE);
//        map.put("已稳定", EvaluationStandardConstant.HAS_BEEN_STABLE);
//        String jsonString = JSONObject.toJSONString(map);
//        List<QuestionBank> list = createRandoms(questionBanks, num);
//        for (QuestionBank questionBank : list) {
//            TrainStudentScheduleQuestion bean = new TrainStudentScheduleQuestion();
//            // bean.setCenterId(scheduleBasicsVO.getCenterId());
//            // bean.setTeacherId(scheduleBasicsVO.getTeacherId());
//            bean.setStudentId(1L);
//            bean.setScheduleTime(Integer.valueOf(nextMonth));
//            bean.setProjectType(questionBank.getProjectType());
//            bean.setProjectSecondType(questionBank.getProjectSecondType());
//            bean.setEvaluateModuleType(questionBank.getEvaluateModuleType());
//            bean.setEvaluateQuestion(questionBank.getEvaluateQuestion());
//            bean.setEvaluateScore(questionBank.getEvaluateScore());
//            bean.setQuestionNum(questionNum);
//            bean.setQuestionPlan(questionPlan);
//            bean.setQuestionType(0);
//            bean.setQuestionBankId(questionBank.getId());
//            bean.setQuestionName(questionBank.getQuestionName());
//            bean.setQuestionContent(questionBank.getQuestionContent());
//            bean.setGradeRule(jsonString);
//            bean.setConfirm(1);
//            trainStudentScheduleQuestionMapper.insert(bean);
//            questionNum += 1;
//        }
//        return questionNum;
//    }
//
//    /**
//     * 第一次排课处理
//     *
//     * @param studentId
//     * @param questionNum
//     */
//    public Integer fistSchedule(Long studentId, Integer questionNum, Integer projectType) {
//        Integer questionNumEnd = questionNum;
//        switch (projectType) {
//            // 感统课程12+3
//            case 1:
//                // 感觉与知觉4（2+2）
//                questionNumEnd = firstScheduleRule(studentId, questionNum, 2, 1);
//                // 大运动技能6（2+2+2）
//                questionNumEnd = firstScheduleRule(studentId, questionNum, 3, 2);
//                // 精细技能2（2）
//                questionNumEnd = firstScheduleRule(studentId, questionNum, 2, 3);
//                break;
//            // 认知课程12+3
//            case 2:
//                // 基础认知8（2+2+2+2）
//                questionNumEnd = firstScheduleRule(studentId, questionNum, 4, 4);
//                // 认知能力4（2+2）
//                questionNumEnd = firstScheduleRule(studentId, questionNum, 2, 5);
//                break;
//            // 言语语言课程12+3
//            case 3:
//                // 根据最新的测评计算加权后划分等级
//                ChildEvaluate childEvaluate = childEvaluateMapper.selectByChildId(studentId);
//                Double score = childEvaluate.getGanzhijue() / 60 * 5.5 + childEvaluate.getYuyan() / 40 * 17 + childEvaluate.getRenzhi() / 44 * 12 + childEvaluate.getYundong() / 60 * 10.5 + childEvaluate.getShejiao() / 36 * 25 + childEvaluate.getQingxu() / 40 * 12.5 + childEvaluate.getXingwei() / 40 * 12 + childEvaluate.getGouyin() / 44 * 5.5;
//                if (IntervalUtil.isInTheInterval(String.valueOf(score), "[60, 100]")) {
//                    // 构音A=6（2+2+2）
//                    questionNumEnd = firstScheduleRule(studentId, questionNum, 3, 6);
//                    // 语言A=2（2）
//                    questionNumEnd = firstScheduleRule(studentId, questionNum, 1, 7);
//                    // 社交A=4（2+2）
//                    questionNumEnd = firstScheduleRule(studentId, questionNum, 2, 8);
//                } else if (IntervalUtil.isInTheInterval(String.valueOf(score), "[40, 59]")) {
//                    // 构音B=2（2）
//                    questionNumEnd = firstScheduleRule(studentId, questionNum, 1, 6);
//                    // 语言B=6（2+2+2）
//                    questionNumEnd = firstScheduleRule(studentId, questionNum, 3, 7);
//                    // 社交B=4（2+2）
//                    questionNumEnd = firstScheduleRule(studentId, questionNum, 2, 8);
//                } else if (IntervalUtil.isInTheInterval(String.valueOf(score), "[0, 39]")) {
//                    // 构音 C=0（0）
//                    // firstScheduleRule(studentId, questionNum, 0, 6);
//                    // 语言C=8(2+2+2+2)
//                    questionNumEnd = firstScheduleRule(studentId, questionNum, 4, 7);
//                    // 社交C= 4(2+2)
//                    questionNumEnd = firstScheduleRule(studentId, questionNum, 2, 8);
//                }
//                break;
//            default:
//                break;
//        }
//        return questionNumEnd;
//    }
//
//    /**
//     * 根据课程排里面的课程规则
//     *
//     * @param studentId
//     * @param questionNum
//     */
//    private Integer firstScheduleRule(Long studentId, Integer questionNum, Integer num, Integer projectSecondType) {
//        Integer questionNumEnd = questionNum;
//        List<TrainStudentAbility> studentAbilityList = trainStudentAbilityMapper.selectQuestionCountByStudent(studentId, projectSecondType, num);
//        for (TrainStudentAbility studentAbility : studentAbilityList) {
//            questionNumEnd = addSchedule(studentId, studentAbility.getEvaluateModuleType(), studentAbility.getEvaluateQuestion(), studentAbility.getEvaluateScore(), 2, questionNum, 1);
//            addSchedule(studentId, studentAbility.getEvaluateModuleType(), studentAbility.getEvaluateQuestion(), studentAbility.getEvaluateScore(), 2, questionNum, 2);
//        }
//        return questionNumEnd;
//    }
//
//    /**
//     * 从集合中随机取出N个不重复的元素
//     *
//     * @param list 需要被取出数据的集合
//     * @param n    取出的元素数量
//     * @return
//     */
//    public List createRandoms(List list, int n) {
//        Map<Integer, String> map = new HashMap();
//        List news = new ArrayList();
//        if (list.size() <= n) {
//            return list;
//        } else {
//            while (map.size() < n) {
//                int random = (int) (Math.random() * list.size());
//                if (!map.containsKey(random)) {
//                    map.put(random, "");
//                    news.add(list.get(random));
//                }
//            }
//            return news;
//        }
//    }
//
//}
